package com.suzka.controller;

import com.suzka.pojo.Customer;
import com.suzka.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
/**
 * REST控制器类，处理与客户(Customer)相关的HTTP请求
 * 基础路径为"/customers"，并允许跨域访问
 */
@RestController
@RequestMapping("/customers")
@CrossOrigin
public class CustomerController {

    //依赖注入
    @Autowired
    private CustomerService customerService;

    /**
     * 获取所有客户列表
     * @return 包含所有客户列表的响应实体，状态码为200
     */
    @GetMapping
    public ResponseEntity<List<Customer>> findAll() {
        return ResponseEntity.ok(customerService.findAll());
    }

    /**
     * 根据ID获取单个客户信息
     * @param id 客户ID路径参数
     * @return 如果找到客户则返回客户信息和200状态码，否则返回404状态码
     */
    @GetMapping("/{id}")
    public ResponseEntity<Customer> findById(@PathVariable Integer id) {
        Customer customer = customerService.findById(id);
        return customer != null ? ResponseEntity.ok(customer) : ResponseEntity.notFound().build();
    }

    /**
     * 保存新客户信息
     * @param customer 从请求体获取的客户对象
     * @return 保存操作结果布尔值和200状态码
     */
    @PostMapping
    public ResponseEntity<Boolean> save(@RequestBody Customer customer) {
        return ResponseEntity.ok(customerService.save(customer));
    }

    /**
     * 更新指定ID的客户信息
     * @param id 要更新的客户ID路径参数
     * @param customer 从请求体获取的更新后的客户对象
     * @return 更新操作结果布尔值和200状态码
     */
    @PutMapping("/{id}")
    public ResponseEntity<Boolean> update(@PathVariable Integer id, @RequestBody Customer customer) {
        customer.setId(id);
        return ResponseEntity.ok(customerService.update(customer));
    }

    /**
     * 删除指定ID的客户
     * @param id 要删除的客户ID路径参数
     * @return 删除操作结果布尔值和200状态码
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Boolean> deleteById(@PathVariable Integer id) {
        return ResponseEntity.ok(customerService.deleteById(id));
    }

    /**
     * 根据名称关键词搜索客户
     * @param keyword 搜索关键词请求参数
     * @return 包含匹配客户列表的响应实体，状态码为200
     */
    @GetMapping("/search")
    public ResponseEntity<List<Customer>> searchByName(@RequestParam String keyword) {
        return ResponseEntity.ok(customerService.searchByName(keyword));
    }
}
